It has been known for some years now that computer evolution both at the software and hardware level is unstoppable.
At the hardware level, for example, processors are becoming increasingly faster and integrate new developments, whereas (volatile and non-volatile) memories are having more and more storage capacity.
Similarly, at the software level, applications (for example, operating systems, office or computer-assisted drawing applications, or games) are becoming increasingly powerful and implement greater functionalities, some of which were unthinkable a few years back.
The main drawback of this situation becomes apparent when balance is lost between the characteristics of the hardware resources of the user computer system and the hardware requirements of the software with which it works. To this day, it is not very clear if the software evolves with such great speed because programmers are aware that they have more and more hardware resources, or if the evolution of hardware is essential in order to be able to meet the increasing requirements of the different software implemented. If the software to be used has hardware requirements equal to or greater than the characteristics of the resources of the user computer system, the problems in the operation thereof is clear and obvious. Furthermore, it must be borne in mind that the hardware requirements of certain software are established taking into account that said software will be executed alone in the computer system, but the latter is a rather uncommon situation because, at least, it is entirely possible that there is software being executed in the background, which obviously will also be consuming hardware resources of the system (for example, an antivirus, a firewall, or backup software).
What seems clear is that software programmers are not used to taking into account that most user computer systems do not have state-of-the-art hardware resources and that with each new software or with each update of already existing software they are causing users to update these hardware resources and even to buy new computer systems so as to be able to at least execute that software and obtain a suitable software performance. All this ultimately leads to a high economical cost for the users, not only for acquiring the software but also for updating the hardware resources of their system.
These problems are also present in server-type (application server, data server, etc.) computer systems. An increase in hardware requirements by a server software (for example, after an update) can cause this server to not be able to provide service to all the users which it was managing up until that moment, if an update of its hardware resources has not been previously performed. Similarly, if the server is an application server, for example, the number of applications that it manages may have to be reduced in order to be able to provide service to the same number of users. It is important to point out that in the case of server-type systems the economical cost of this update of the hardware resources is even higher than the update that takes place in the situation described above, since the hardware resources for a server-type computer system have higher costs.
On the other hand, the situation may also arise in which, given a computer system with certain hardware resources, there is an intention to execute thereon a greater number of applications and/or of instances of one and the same application which it could theoretically execute. In this situation, the hardware resources are what they are and, therefore, it is necessary to act on the execution of the applications and/or of the different instances of one and the same application to reduce the consumption of the hardware resources that they use.
The operating system in any one of the situations described above is not capable of effectively controlling the use of hardware resources running the applications and/or the instances of one and the same application while it is being executed, so a tool is necessary for that purpose.